package com.by.rpc.registry;

import com.by.rpc.dto.ServiceInstance;

import java.util.List;
import java.util.Map;

/**
 * 服务注册接口
 */
public interface ServiceRegistry {
    /**
     * 注册服务实例
     *
     * @param serviceInstance 服务实例信息
     */
    void register(ServiceInstance serviceInstance);

    /**
     * 注销服务实例
     *
     * @param serviceInstance 服务实例信息
     */
    void deregister(ServiceInstance serviceInstance);

    /**
     * 发现服务实例
     *
     * @param key 注册键
     * @return 服务实例列表
     */
    List<ServiceInstance> discover(String key);

    /**
     * 更新服务实例心跳时间
     *
     * @param serviceInstance 服务实例信息
     */
    void updateHeartbeat(ServiceInstance serviceInstance);

    /**
     * 注册API端点信息
     *
     * @param key           注册键
     * @param value         注册值
     * @param expireSeconds 过期时间（秒）
     */
    void registerApiEndpoint(String key, String value, int expireSeconds);

    /**
     * 发现API端点信息
     *
     * @param pattern 匹配模式
     * @return 匹配的键值对
     */
    Map<String, String> discoverApiEndpoints(String pattern);

    /**
     * 获取所有注册的服务
     *
     * @return 所有注册的服务键值对
     */
    Map<String, String> getAllServices();

    /**
     * 根据键获取服务实例
     *
     * @param key 服务键
     * @return 服务实例
     */
    ServiceInstance getInstance(String key);

    /**
     * 根据键获取API端点信息
     *
     * @param key API端点键
     * @return API端点信息
     */
    String getApiEndpoint(String key);

    void registerInterfaceToService( String field, String value, int expireSeconds);

    String getServernameByInterface(String field);
}